package gui;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import basicas.Local;

import basicas.SetorLocal;

import negocio.Fachada;

@ManagedBean
// @ManagedBean(name=�msg�)
public class InserirLocalBean {

	private Local local;
	private String msgRetorno;
	private List<SetorLocal> setoresLocal;
	private Integer[] setoresLocalSelecionados;
	private List<SetorLocal> setoresLocalSelecionados2;
	private List<Local> listaLocais;
	private int codigoLocal;
        private List<Local> filteredLoc;

	public InserirLocalBean() {
		local = new Local();
		setoresLocalSelecionados2 = new ArrayList<SetorLocal>();
	}

	public String inserir() {

		Fachada fachada = Fachada.getInstancia();

		if (this.local.getDescricao().equals("")
				|| this.local.getLogradouro().equals("")
				|| this.local.getCidade().equals("")
				|| this.local.getBairro().equals("")
				|| this.local.getUf().equals("")
				|| this.local.getCep().equals("")) {

			if (this.local.getDescricao().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL, "Digite o nome do local",
						"");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}

			if (this.local.getLogradouro().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL,
						"Digite o Logradouro do local", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}

			if (this.local.getBairro().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL,
						"Digite o Bairro do local", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}

			if (this.local.getCidade().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL,
						"Digite o Cidade do local", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}
			
			if (this.local.getUf().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL,
						"Digite o Estado do local", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}
			
			if (this.local.getCep().equals("")) {

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_FATAL,
						"Digite o Cep do local", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}
			
						

		} else {

			try {

				for (int i = 0; i < setoresLocalSelecionados.length; i++) {

					setoresLocalSelecionados2.add(new SetorLocal(
							setoresLocalSelecionados[i]));

				}

				local.setSetorLocal(setoresLocalSelecionados2);

				fachada.inserir(local);
				local = null;
				msgRetorno = "Opera��o realizada sucesso!";

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_INFO,
						"Local Inserido com Sucesso", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);

			} catch (Exception e) {
				msgRetorno = "Erro na opera��o!";

				FacesMessage msg = new FacesMessage(
						FacesMessage.SEVERITY_ERROR,
						"Erro na Opera��o", "");
				FacesContext.getCurrentInstance().addMessage(null, msg);
				e.printStackTrace();
			}

		}
		return msgRetorno;

	}

	public String removerLocal(Local loc) {

		Fachada.getInstancia().removerLocal(loc);
		return null;
	}

	public String getMsgRetorno() {
		return msgRetorno;
	}

	public void setMsgRetorno(String msgRetorno) {
		this.msgRetorno = msgRetorno;
	}

	public Local getLocal() {
		return local;
	}

	public void setLocal(Local local) {
		this.local = local;
	}

	public List<SetorLocal> getSetoresLocal() {
		Fachada fachada = Fachada.getInstancia();
		setoresLocal = fachada.listarTodosSetoresLocal();
		return setoresLocal;
	}

	public List<Local> getListaLocais() {
		Fachada fachada = Fachada.getInstancia();
		listaLocais = fachada.listarTodosLocais();
		return listaLocais;
	}

	public void setSetoresLocal(List<SetorLocal> setoresLocal) {
		this.setoresLocal = setoresLocal;
	}

	public Integer[] getSetoresLocalSelecionados() {
		return setoresLocalSelecionados;
	}

	public void setSetoresLocalSelecionados(Integer[] setoresLocalSelecionados) {
		this.setoresLocalSelecionados = setoresLocalSelecionados;
	}

	public String getSetoresFormatados() {
		return "";
	}

	public String alterar(Local loc) {
		this.local = loc;

		setoresLocalSelecionados = new Integer[local.getSetorLocal().size()];

		for (int i = 0; i < local.getSetorLocal().size(); i++) {

			if (local.getSetorLocal().get(i) != null) {
				setoresLocalSelecionados[i] = local.getSetorLocal().get(i)
						.getCodigo_setorlocal();
			}

		}

		return "editarlocal.xhtml";
	}

	public void salvarEdicao() {

		for (int i = 0; i < setoresLocalSelecionados.length; i++) {

			setoresLocalSelecionados2.add(new SetorLocal(
					setoresLocalSelecionados[i]));

		}

		local.setSetorLocal(setoresLocalSelecionados2);

		Fachada.getInstancia().alterar(local);
		FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
				"Altera��o com sucesso", "");
		FacesContext.getCurrentInstance().addMessage(null, msg);
		// return "tela-sucesso.xhtml";
	}

	public String exibirHome() {
		return "listarlocais.xhtml?faces-redirect=true";
	}

	public void buscar() {

		int codigo = this.codigoLocal;

		Fachada fachada = Fachada.getInstancia();
		this.local = fachada.buscarLocalPorChave(codigo);

		if (this.local != null) {

			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Local Encontrado", "");
			FacesContext.getCurrentInstance().addMessage(null, msg);
			// return "tela-sucesso.xhtml";

		} else {

			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN,
					"Local N�o Encontrado", "");
			FacesContext.getCurrentInstance().addMessage(null, msg);
			// return "tela-sucesso.xhtml";
		}

		// if (fachada.buscarLocalPorChave(codigo)!= null ){
		//
		// msgRetorno = "Local Encontrado!";
		// }else{
		//
		// msgRetorno = "Local N�o Encontrado!";
		//
		// }

	}

	public void desmarcarTodos() {

		this.setoresLocalSelecionados = null;

	}
	
	public void limpar(){
		
		
		this.local = null;
		
	}
	

	public Local getBuscaLocal() {
		return this.local;

	}

	public int getCodigoLocal() {
		return codigoLocal;
	}

	public void setCodigoLocal(int codigoLocal) {
		this.codigoLocal = codigoLocal;
	}

    public List<Local> getFilteredLoc() {
        return filteredLoc;
    }

    public void setFilteredLoc(List<Local> filteredLoc) {
        this.filteredLoc = filteredLoc;
    }

        
}
